package cn.magicman.demo;

public class JoinDemo {
    /*
    就像等人吃饭：妈妈（主线程）必须等所有人（子线程）做完事才能开饭
    谁最慢等谁：虽然小明最快（2秒），但必须等最慢的小刚（5秒）
    join()就是喊"等你做完"：
    不加join()：妈妈会直接喊开饭（可能饭还没熟）
    加了join()：妈妈会耐心等所有人完成
    */
    public static void main(String[] args) throws InterruptedException {
        // 1. 创建3个工作线程（模拟三个人干活）
        Thread xiaoming = new Thread(() -> {
            System.out.println("小明开始煮饭...");
            try { Thread.sleep(2000); } // 煮饭要2秒
            catch (InterruptedException e) { e.printStackTrace(); }
            System.out.println("✅小明煮好饭了！");
        });

        Thread xiaohong = new Thread(() -> {
            System.out.println("小红开始炒菜...");
            try { Thread.sleep(3000); } // 炒菜要3秒
            catch (InterruptedException e) { e.printStackTrace(); }
            System.out.println("✅小红炒好菜了！");
        });

        Thread xiaogang = new Thread(() -> {
            System.out.println("小刚开始炖汤...");
            try { Thread.sleep(5000); } // 炖汤要5秒
            catch (InterruptedException e) { e.printStackTrace(); }
            System.out.println("✅小刚炖好汤了！");
        });

        // 2. 让所有人开始干活（启动线程）
        System.out.println("--- 开饭前准备 ---");
        xiaoming.start();
        xiaohong.start();
        xiaogang.start();

        // 3. 主线程（妈妈）等所有人干完活
        xiaoming.join(); // 等小明
        xiaohong.join(); // 等小红
        xiaogang.join(); // 等小刚

        // 4. 所有人都完成后继续
        System.out.println("\n--- 所有人活都干完了 ---");
        System.out.println("妈妈：开饭啦！🍚🥘🍲");
    }
}